#pragma once

#include <string>
#include <functional>
#include "TcpServer.hpp"
#include "Socket.hpp"

class TcpServer;
class Connection;
using func = std::function<void(Connection *)>;
class Connection
{
public:
    Connection(TcpServer *server ,int sock)
    :_server(server),_sock(sock),_sender(nullptr),_recv(nullptr),_excepter(nullptr)
    {}
     ~Connection()
    {
        Close();
    }
public:
    //注册方法
    void Register(func r, func s, func e)
    {
        _recv = r;
        _sender = s;
        _excepter = e;
    }
   
    void Close()
    {
        if(_sock != defaultSock) close(_sock);
    }
public:
    //方法函数
    std::string _inBuffer;//接收缓存区
    std::string _outBuffer;//发送缓冲区
    int _sock;//该链接的对应套接字

    func _sender;//向套接字写
    func _recv;//从套接字读
    func _excepter;//处理错误

    TcpServer* _server;//回调总的tcpserve
    //在后续的其它需求中，可根据其内部对应的方法函数的调用的各种记录满足，来添加其他变量，如最近修改时间
};